import Taro from '@tarojs/taro';
import { StorageKey } from '@/constants/storage';

/**
 * 动态控制 tabbar 的显示和隐藏
 */
export class TabbarUtil {
  /**
   * 检查是否应该显示 tabbar
   */
  static shouldShowTabbar(): boolean {
    return Taro.getStorageSync(StorageKey.HAS_SHOP_ID) || false;
  }

  /**
   * 隐藏 tabbar
   */
  static hideTabbar() {
    try {
      Taro.hideTabBar({
        animation: false
      });
    } catch (error) {
      console.warn('隐藏 tabbar 失败:', error);
    }
  }

  /**
   * 显示 tabbar
   */
  static showTabbar() {
    try {
      Taro.showTabBar({
        animation: false
      });
    } catch (error) {
      console.warn('显示 tabbar 失败:', error);
    }
  }

  /**
   * 根据 shopId 状态自动控制 tabbar 显示
   */
  static autoControlTabbar() {
    if (this.shouldShowTabbar()) {
      this.showTabbar();
    } else {
      this.hideTabbar();
    }
  }

  /**
   * 获取当前的 shopId
   */
  static getShopId(): string | null {
    return Taro.getStorageSync(StorageKey.SHOP_ID) || null;
  }

  /**
   * 检查当前页面是否是 tabbar 页面
   */
  static isTabbarPage(pagePath: string): boolean {
    const tabbarPages = [
      'pages/home/index/index',
      'pages/dress/index/index',
      'pages/makeup/index/index',
      'pages/preselect/index/index'
    ];
    
    const normalizedPath = pagePath.replace(/^\//, '');
    return this.shouldShowTabbar() && tabbarPages.includes(normalizedPath);
  }

  /**
   * 获取当前页面路径
   */
  static getCurrentPagePath(): string | null {
    try {
      const pages = Taro.getCurrentPages();
      if (pages.length > 0) {
        const currentPage = pages[pages.length - 1];
        return currentPage?.route || null;
      }
      return null;
    } catch (error) {
      return null;
    }
  }

  /**
   * 检查当前页面是否是 tabbar 页面
   */
  static isCurrentTabbarPage(): boolean {
    const currentPath = this.getCurrentPagePath();
    if (!currentPath) return false;
    return this.isTabbarPage(currentPath);
  }

  /**
   * 设置预选 tabbar 的 badge
   * @param count 预选数量，如果为 0 或未提供，则移除 badge
   * @param force 是否强制设置，即使不在 TabBar 页面也设置（不推荐）
   */
  static setPreselectBadge(count?: number, force: boolean = false) {
    try {
      // 只有在 tabbar 显示时才设置 badge
      if (!this.shouldShowTabbar()) {
        return;
      }

      // 检查当前页面是否是 TabBar 页面，如果不是且不强制，则不设置
      if (!force && !this.isCurrentTabbarPage()) {
        // 不在 TabBar 页面，不设置 badge，避免报错
        return;
      }

      const preselectTabIndex = 3; // 预选 tabbar 的索引（从 0 开始）
      
      // 使用 setTimeout 延迟执行，确保 TabBar 已经初始化
      setTimeout(() => {
        try {
          if (count && count > 0) {
            // 设置 badge，如果数量大于 99，显示 99+
            const badgeText = count > 99 ? '99+' : String(count);
            Taro.setTabBarBadge({
              index: preselectTabIndex,
              text: badgeText,
            });
          } else {
            // 移除 badge
            Taro.removeTabBarBadge({
              index: preselectTabIndex,
            });
          }
        } catch (error: any) {
          // 忽略错误，可能是 TabBar 还未初始化
          console.warn('设置 tabbar badge 失败:', error);
        }
      }, 100);
    } catch (error) {
      console.warn('设置 tabbar badge 失败:', error);
    }
  }
}
